IDataErrorInfo এবং INotifyDataErrorInfo Interface ব্যবহার

Microsoft Technologies - এমভিভিএম (MVVM) Validation এবং Error Handling Techniques |
165
165

IDataErrorInfo এবং INotifyDataErrorInfo দুটি ইন্টারফেস MVVM প্যাটার্নে ডেটা ভ্যালিডেশন (Data Validation) করার জন্য ব্যবহৃত হয়। যখন একটি অ্যাপ্লিকেশন ইউজার ইনপুট নেয়, তখন ডেটা সঠিক কিনা তা যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। এই দুইটি ইন্টারফেস আপনাকে আপনার অ্যাপ্লিকেশন ডেটার ভ্যালিডেশন ম্যানেজ করতে সাহায্য করে, এবং MVVM প্যাটার্নে ViewModel-এ এই ভ্যালিডেশনকে ইনক্লুড করা হয়।


IDataErrorInfo Interface

IDataErrorInfo ইন্টারফেসটি একটি সিঙ্গল প্রপার্টি এবং একটি মেথড প্রদান করে, যা UI কে জানাতে সাহায্য করে যে কোনো প্রপার্টি বৈধ কিনা। যখন কোনো ViewModel এর প্রপার্টি ত্রুটি ঘটায়, তখন IDataErrorInfo এর মাধ্যমে একটি ত্রুটি বার্তা প্রদর্শন করা হয়। এটি সাধারণত সিঙ্গেল প্রপার্টির ভিত্তিতে ত্রুটি যাচাইয়ের জন্য ব্যবহৃত হয়।

IDataErrorInfo Interface এর বৈশিষ্ট্য

  1. Error Property: সাধারণ ত্রুটির বার্তা প্রদান করে।
  2. Item Property: নির্দিষ্ট প্রপার্টির জন্য ত্রুটি বার্তা প্রদান করে।

IDataErrorInfo এর উদাহরণ:

public class Product : IDataErrorInfo
{
    private string _name;
    private decimal _price;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public decimal Price
    {
        get { return _price; }
        set { _price = value; }
    }

    public string Error
    {
        get { return "There are some errors in the product."; }
    }

    public string this[string columnName]
    {
        get
        {
            string errorMessage = null;

            // Checking for validation on 'Name'
            if (columnName == "Name" && string.IsNullOrEmpty(_name))
            {
                errorMessage = "Name cannot be empty.";
            }

            // Checking for validation on 'Price'
            if (columnName == "Price" && _price <= 0)
            {
                errorMessage = "Price must be greater than zero.";
            }

            return errorMessage;
        }
    }
}

এখানে:

  • Error প্রপার্টি সাধারণ ত্রুটি বার্তা প্রদান করে, যা সমস্ত প্রপার্টির জন্য প্রযোজ্য হতে পারে।
  • Item প্রপার্টি (this[string columnName]) নির্দিষ্ট প্রপার্টি অনুযায়ী ত্রুটি বার্তা প্রদান করে।

IDataErrorInfo এর মাধ্যমে ViewModel এর প্রপার্টি ভ্যালিডেশনের ত্রুটি পরিচালনা করা যায়, এবং View তে ওই ত্রুটির বার্তা প্রদর্শন করা হয়।


INotifyDataErrorInfo Interface

INotifyDataErrorInfo ইন্টারফেসটি IDataErrorInfo এর মতোই কাজ করে, তবে এতে কিছু উন্নত ফিচার রয়েছে। INotifyDataErrorInfo একটি ইভেন্টের মাধ্যমে ডেটা ত্রুটি পরিবর্তন সিগন্যাল পাঠাতে সাহায্য করে, যাতে UI তে ত্রুটি বার্তা সহজে আপডেট করা যায়। এটি বিশেষভাবে যখন ভ্যালিডেশন পরিবর্তিত হয়, তখন UI কে জানাতে সহায়ক হয়, যেমন একটি ফর্মে কোনো ত্রুটি ঘটলে তা সঠিকভাবে প্রতিফলিত হয়।

INotifyDataErrorInfo Interface এর বৈশিষ্ট্য

  1. HasErrors Property: জানায় যে, ডেটাতে কোনো ত্রুটি রয়েছে কিনা।
  2. ErrorsChanged Event: ত্রুটি পরিবর্তিত হলে ইভেন্ট ট্রিগার করে।
  3. GetErrors Method: নির্দিষ্ট প্রপার্টি বা সমস্ত প্রপার্টি সম্পর্কিত ত্রুটি রিটার্ন করে।

INotifyDataErrorInfo এর উদাহরণ:

public class Product : INotifyDataErrorInfo
{
    private string _name;
    private decimal _price;
    private Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            ValidateName();
        }
    }

    public decimal Price
    {
        get { return _price; }
        set
        {
            _price = value;
            ValidatePrice();
        }
    }

    public bool HasErrors => _errors.Any();

    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

    public IEnumerable GetErrors(string propertyName)
    {
        if (_errors.ContainsKey(propertyName))
        {
            return _errors[propertyName];
        }

        return null;
    }

    private void ValidateName()
    {
        if (string.IsNullOrEmpty(_name))
        {
            AddError("Name", "Name cannot be empty.");
        }
        else
        {
            RemoveError("Name");
        }
    }

    private void ValidatePrice()
    {
        if (_price <= 0)
        {
            AddError("Price", "Price must be greater than zero.");
        }
        else
        {
            RemoveError("Price");
        }
    }

    private void AddError(string propertyName, string error)
    {
        if (!_errors.ContainsKey(propertyName))
        {
            _errors[propertyName] = new List<string>();
        }

        if (!_errors[propertyName].Contains(error))
        {
            _errors[propertyName].Add(error);
            OnErrorsChanged(propertyName);
        }
    }

    private void RemoveError(string propertyName)
    {
        if (_errors.ContainsKey(propertyName))
        {
            _errors[propertyName].Clear();
            OnErrorsChanged(propertyName);
        }
    }

    private void OnErrorsChanged(string propertyName)
    {
        ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName));
    }
}

এখানে:

  • HasErrors প্রপার্টি সমস্ত ত্রুটি যাচাই করে, যা true বা false রিটার্ন করবে।
  • ErrorsChanged ইভেন্ট ত্রুটির পরিবর্তন ঘটলে ট্রিগার হয়, এবং View তে UI আপডেট করতে সহায়ক হয়।
  • GetErrors মেথড নির্দিষ্ট প্রপার্টি বা সমস্ত প্রপার্টির জন্য ত্রুটি রিটার্ন করে।

IDataErrorInfo এবং INotifyDataErrorInfo এর মধ্যে পার্থক্য

  1. ডেটা আপডেট:
    • IDataErrorInfo ত্রুটি ম্যানেজমেন্টে সিঙ্গেল থ্রেডেড এবং আপডেট করা একেবারে সরাসরি হয়।
    • INotifyDataErrorInfo ত্রুটি পরিবর্তিত হলে UI তে তৎক্ষণাৎ আপডেট করার জন্য ErrorsChanged ইভেন্ট ব্যবহার করে, যা UI-তে রিয়েল টাইম ত্রুটি ম্যানেজমেন্ট করতে সহায়ক।
  2. ইভেন্ট হ্যান্ডলিং:
    • IDataErrorInfo ত্রুটির বার্তা সরাসরি মেথডের মাধ্যমে প্রদর্শিত হয়, তবে ত্রুটি পরিবর্তন হলে UI তে তা স্বয়ংক্রিয়ভাবে আপডেট হয় না।
    • INotifyDataErrorInfo ইভেন্ট ব্যবহার করে ত্রুটি পরিবর্তন ট্র্যাক করে এবং UI কে জানানোর জন্য ErrorsChanged ইভেন্ট ব্যবহার করে।
  3. লচিলাতা:
    • IDataErrorInfo তুলনায় INotifyDataErrorInfo বেশি লচিল (flexible) এবং ডাইনামিকভাবে UI তে ত্রুটি প্রদর্শন করতে সাহায্য করে।

উপসংহার

IDataErrorInfo এবং INotifyDataErrorInfo দুটি ইন্টারফেস ডেটা ভ্যালিডেশন পরিচালনা করতে ব্যবহৃত হয়। IDataErrorInfo সরল এবং সোজা ইন্টারফেস, যা মূলত প্রপার্টির জন্য ভ্যালিডেশন বার্তা সরবরাহ করে। অন্যদিকে, INotifyDataErrorInfo উন্নত এবং ডাইনামিক ভ্যালিডেশন ম্যানেজমেন্ট সরবরাহ করে, যা UI তে ত্রুটি আপডেট করার জন্য ইভেন্ট ব্যবহার করে। MVVM প্যাটার্নে এই ইন্টারফেসগুলো ViewModel এর মধ্যে ডেটা ভ্যালিডেশন নিশ্চিত করতে ব্যবহৃত হয়, যাতে ব্যবহারকারীর ইনপুট ত্রুটি শোধরানো যায়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion